#include "model.h"




/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////




void Model::readLimits( QString myFileString_Limits )
{


        QFile myFile( myFileString_Limits );

        myFile.open(QIODevice::ReadOnly);

        if( !myFile.isOpen() )
        {
            ErrorManager::error(3, myFileString_Limits);
            return;
        }

        QTextStream myStream(&myFile);

        /////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /////////////////////////////////////////////////////////////////////////////////////////////////////////////

        tmp_Limits.clear();

        /////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /////////////////////////////////////////////////////////////////////////////////////////////////////////////

        while (myStream.atEnd() == false)
        {

                TMPLimitStruct limitTMP;

                ////////////////////////////////////////////////////////////////
                ////////////////////////////////////////////////////////////////
                QString tmpName;
                QString tmpName2;
                QString tmpName3;
                int     tmpFlag;
                double  tmpLimit;
                ////////////////////////////////////////////////////////////////
                ////////////////////////////////////////////////////////////////

                limitTMP.Limits_FLAG_Rotate.resize(3);
                limitTMP.LimitsDgr.resize(3);

                ////////////////////////////////////////////////////////////////
                ////////////////////////////////////////////////////////////////

                myStream >> tmpName;

                                                                                        /////////////////////////////////////
                                                                                        /////////////////////////////////////
                                                                                        if (tmpName.toStdString()=="") break;
                                                                                        /////////////////////////////////////
                                                                                        /////////////////////////////////////

                if (tmpName == "Lower")
                {
                    myStream >> tmpName2;
                    myStream >> tmpName3;

                    tmpName = tmpName + " " + tmpName2 + " " + tmpName3;
                }

                limitTMP.NameBone = tmpName;

                ////////////////////////////////////////////////////////////////
                ////////////////////////////////////////////////////////////////

                                                            myStream >> tmpFlag;          limitTMP.Limits_FLAG_Translate   = (tmpFlag == 1) ? true : false;
                for (int iii=0; iii<3; iii++)       {       myStream >> tmpFlag;          limitTMP.Limits_FLAG_Rotate[iii] = (tmpFlag == 1) ? true : false;         }

                ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                myStream >> limitTMP.DofAxes.rotX(0); myStream >> limitTMP.DofAxes.rotX(1); myStream >> limitTMP.DofAxes.rotX(2);
                myStream >> limitTMP.DofAxes.rotY(0); myStream >> limitTMP.DofAxes.rotY(1); myStream >> limitTMP.DofAxes.rotY(2);
                myStream >> limitTMP.DofAxes.rotZ(0); myStream >> limitTMP.DofAxes.rotZ(1); myStream >> limitTMP.DofAxes.rotZ(2);
                ////////////////////////////////////////////////////////////////////
                ////////////////////////////////////////////////////////////////////
                for (int iii=0; iii<3; iii++)
                {
                    myStream >> tmpLimit;    limitTMP.LimitsDgr[iii].min = tmpLimit;
                    myStream >> tmpLimit;    limitTMP.LimitsDgr[iii].max = tmpLimit;
                }
                ////////////////////////////////////////////////////////////////////
                ////////////////////////////////////////////////////////////////////
                limitTMP.DofAxes.rotX.normalize();
                limitTMP.DofAxes.rotY.normalize();
                limitTMP.DofAxes.rotZ.normalize();
                ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

                tmp_Limits.append( limitTMP );

        }

        /////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /////////////////////////////////////////////////////////////////////////////////////////////////////////////

        myFile.close();

        /////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /////////////////////////////////////////////////////////////////////////////////////////////////////////////

}




/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////




void Model::print_Limits()
{

        for (int iii=0; iii<tmp_Limits.size(); iii++)
        {

                                                                    qDebug() <<                                               ""; // \n
            if ((int)tmp_Limits[iii].Limits_FLAG_Translate == 1)    qDebug() <<      tmp_Limits[iii].NameBone << "---------------------------------------------------------------RBM";
            else                                                    qDebug() <<      tmp_Limits[iii].NameBone;
                                                                    qDebug() << (int)tmp_Limits[iii].Limits_FLAG_Translate << "\t" <<
                                                                                (int)tmp_Limits[iii].Limits_FLAG_Rotate[0] << "\t" <<
                                                                                (int)tmp_Limits[iii].Limits_FLAG_Rotate[1] << "\t" <<
                                                                                (int)tmp_Limits[iii].Limits_FLAG_Rotate[2];

            for (int jjj=0; jjj<3; jjj++)
            {
                    QString          colorStr;
                    if      (jjj==0) colorStr = "R";
                    else if (jjj==1) colorStr = "G";
                    else             colorStr = "B / Y";

                                                                    qDebug() <<     tmp_Limits[iii].LimitsDgr[jjj].min     << "\t" <<
                                                                                    tmp_Limits[iii].LimitsDgr[jjj].max     << "\t" << colorStr;
            }


        }

}




/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////




